Помимо самых пунктов у каждого пункта может быть значение одно или более. Получить массив имен значений можно используя функцию GetValueNames она вернет массив. Смотрим пример:
using System;
using Microsoft.Win32;
class MainClass
{
public static void Main(string[] args)
{
RegistryKey rk = Registry.CurrentConfig;
GetNext(rk);
}
public static void GetNext(RegistryKey rk)
{
foreach(string cv in rk.GetValueNames())
{
Console.Write("Value - ");
Console.WriteLine(cv);
}
foreach (string s in rk.GetSubKeyNames())
{
Console.WriteLine(s);
GetNext(rk.OpenSubKey(s));
}
}
}
Все как всегда. Только мы получили ключ можно получить список имен и воспользоваться foreach для их перебора. Вот результат:

А вот реестр:
